function Snake() {
    // 蛇的初始化身体
    this.body = [
        {"row" : 3, "col" : 5}, //蛇头
        {"row" : 3, "col" : 4},
        {"row" : 3, "col" : 3},
        {"row" : 3, "col" : 2}
    ],
    // 蛇的当前运动状态
    this.direction = 'R',

    // 蛇即将改变的运动状态
    this.willDirection = 'R'
};

// 蛇的方向改变，防止的是在一次渲染之前会出现调头的情况
Snake.prototype.changeDirection = function(d) {
    this.willDirection = d;
}

// 更新蛇的运动
Snake.prototype.update = function() {
    // 将蛇的当前状态赋给蛇的即将改变的运动状态
    this.direction = this.willDirection;
    switch(this.direction) {
        case "R":
            this.body.unshift({"row": this.body[0].row, "col": this.body[0].col + 1});
            break;
        case "D":
            this.body.unshift({"row": this.body[0].row + 1,"col": this.body[0].col});
            break;
        case "L":
            this.body.unshift({'row': this.body[0].row, 'col': this.body[0].col -1});
            break;
        case "U":
            this.body.unshift({"row": this.body[0].row - 1,"col": this.body[0].col});
            break;
    }
    // 死亡的判断   如果蛇碰到了盒子的边缘部分  则蛇死掉
    if (this.body[0].col > game.col - 1 || this.body[0].row > game.row - 1 || this.body[0].col < 0 || this.body[0].row < 0) {
        alert('游戏结束，我碰到了墙');
        this.body.shift();  //删除是因为当前的头增是不合法的，因为游戏已经结束了
        clearInterval(game.timer);
    }
    // 死亡的判断  如果蛇撞到了自己的身体  则蛇死亡 即蛇的头和蛇的身子在同一个单元格中
    for (var i = 1;i < this.body.length; i++) {
        if (this.body[0].col == this.body[i].col && this.body[0].row == this.body[i].row) {
            alert('游戏结束，我撞到自己的身体了');
            this.body.shift();
            clearInterval(game.timer);
        }
    }

    // 蛇吃食物
    if (this.body[0].row == game.food.row && this.body[0].col == game.food.col) {
        // 当蛇头和食物在同一个表格时  蛇就会吃掉食物  此时就需要重新创建一个食物对象  而且蛇的身体会增长  也就是不需要删掉蛇的尾巴
        game.food = new Food(game)
        game.score++;
    } else {
        // 当蛇没有吃掉食物时  蛇在往前运动  为了保证蛇的长度不变   蛇的尾部需要进行一个剪切
        this.body.pop();
    }
}

Snake.prototype.render = function() {
    // 蛇头的渲染
    game.setColor(this.body[0].row, this.body[0].col, '-webkit-radial-gradient(center center , pink,red)');
    // 蛇的身体
    for (var i = 1; i < this.body.length; i++) {
        game.setColor(this.body[i].row, this.body[i].col, '-webkit-radial-gradient(center center , orange,red)')
    }
}

